/**
 *  @ Desc 四方 103 tcp通信客户端界面实现类，提供参数设置 和 收发操作界面
 *   保护作为tcp服务端 ，端口号 2404
 * */

#ifndef PANELSF_TCPCLIENT
#define PANELSF_TCPCLIENT

#include <QWidget>
#include "SF/SFConnection.h"
#include "SF/SF103_Parser.h"
#include "PanelBill.h"
#include "SF/SFConnection.h"
#include "CommBase.h"

namespace Ui {
class PanelSF_TCPClient;
}

class PanelSF_TCPClient : public QWidget, public CommBase
{
    Q_OBJECT
public:
    explicit PanelSF_TCPClient(QWidget *parent = nullptr);
    ~PanelSF_TCPClient();

    void connectDevice(QString devAddr, QString devPort, QString localAddr, QString localPort) override;
    void readDeviceAll() override;
    void getAllBillInfo( QMap<QString, BillTableStruct> &) override;
    void setBillGroup(QStringList& ) override;
    void disConnectDevice() override;

    void showTable() override;

    QStringList getErrorLog() override;

signals:
    void sig_sendClicked();    //发送消息信号
    void sig_connect();
    //void sig_parseFinished(QStringList, int);    // parser层解析完后通知 table更新数据

private slots:
    void slot_send();   // 发送消息
    void slot_recv();   // 接收消息3
    void slot_connect();
    void slot_updateUiAsDisconnect();
    void slot_updateUiAsConnected();
    void slot_updateUiAsSend(QString sendMsg);
    void on_pushButtonConnect_clicked();
    void on_pushButtonClear_clicked();
    // 选择对应命令发送给保护
    void on_pushButtonSendCombox_clicked();
    void on_radioButtonHeart_clicked(bool checked);
    // 选择读取指定组的信息
    void on_pushButtonReadGroup_clicked();
    // 读取定值有关组的信息
    void slot_pushButtonReadAll_clicked();
    void slot_setCanReadBillInfo();
    // 展示定值模板
    void slot_pushButtonShowBill_clicked();
    // 将混在一起的报文进行分离
    void slot_pushButtonWashFrame_clicked();
    void slot_pushButtonParseASDU_clicked();
    void on_pushButtonClearASDUs_clicked();

private:
    // 读取全部定值组的有关信息
    void readAllGroupsInfo();
    void readAllTitlesInfo();

private:
    Ui::PanelSF_TCPClient *ui;
    SFConnection *m_client;   // 通信套接字接口
    SF103Constructer m_nrjbPacketConstructer;
    SF103_Parser m_Parser;
    SFAsduParser m_asduParser;
    PanelBill m_panelBill;    //显示装置定值信息模板

    //  通信参数配置
    QString m_ip;       // 保护设备的 ip地址
    QString m_port;        // 保护上的tcp监听服务端口
    // 在tcp 连接成功后进行初始化
    QString m_srcAddr;      //   103 源设备地址，也就是本机ip地址的后  
    bool m_isCanGetBillInfo; // true --已经获取到各组标题信息， false -- 待获取分组信息


    QByteArrayList m_recvList;
    QTimer m_timerConnectDev;

    QStringList m_errorList;
};
#endif // SF_TCPCLIENT
